package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是线程的一个管理机制，主要解决两个问题
 * 1: 控制线程数量
 * 2： 重用线程
 *
 * 线程数量不控制会可能会因为同时并发的线程过多出现CPU过度切换，
 * 导致并发性能降低（卡顿）
 *
 * 线程如果不重用则生命周期与任务一致，当任务很多时，可能出现线程被频繁的创建和销毁
 * 徒增无意义的开销。
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建一个线程池
        ExecutorService threadPool= Executors.newFixedThreadPool(3);
        //交给程序池五个任务
        for (int i = 0; i <5 ; i++) {
            Runnable r =new Runnable() {
                @Override
                public void run() {
                    Thread t =Thread.currentThread();
                    System.out.println(t+":正在执行任务ing.......");

                    try {
                        Thread.sleep(10000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(t+"：任务执行完毕！！！！");
                }
            };
            threadPool.execute(r);//将任务交给线程池
            System.out.println("交给了线程池一个任务");

        }//for循环结束
        //threadPool.shutdown();
        threadPool.shutdownNow();//停 说停就停
        System.out.println("线程池停止了！");

    }
}
